package fwmpc.resource;

import fwmpc.exception.WeiXinRuntimeException;
import lombok.extern.slf4j.Slf4j;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.concurrent.TimeUnit;

/**
 * 类描述:  微信常量属性配置服务
 * <br />
 * 用于描述微信使用过程中所使用的地址、标准编码、存储标准及间隔等信息
 * @author 王雷
 * @version 1.0.0
 * @date 2022/6/27 0027 下午 2:03
 */
@Slf4j
public abstract class AbstractWeiXinCommonAttributeServe implements IWeiXinCommonAttribute {

    /**
     * 功能描述：微信访问地址——换取Token地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 9:07
     */
    @Override
    public String giveCodeUrl() {
        return "https://open.weixin.qq.com/connect/oauth2/authorize";
    }

    /**
     * 功能描述：微信访问地址——获取OpenID地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 9:07
     */
    @Override
    public String giveOpenIdUrl() {
        return "https://api.weixin.qq.com/sns/oauth2/access_token";
    }

    /**
     * 功能描述：微信访问地址——换取Token地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 9:07
     */
    @Override
    public String giveWebTokenUrl() {
        return "https://api.weixin.qq.com/cgi-bin/token";
    }

    /**
     * 属性描述：微信访问地址——推送模版消息
     *
     * @date : 2023/2/1 0001 上午 9:57
     */
    @Override
    public String giveSendTemplateMessageUrl() {
        return "https://api.weixin.qq.com/cgi-bin/message/template/send";
    }

    /**
     * 功能描述：微信访问地址——换取Ticket地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 9:07
     */
    @Override
    public String giveWebTicketUrl() {
        return "https://api.weixin.qq.com/cgi-bin/ticket/getticket";
    }

    /**
     * 功能描述：微信访问地址——获取用户信息地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:49
     */
    @Override
    public String giveUserInfoUrl() {
        return "https://api.weixin.qq.com/sns/userinfo";
    }

    /**
     * 功能描述：微信访问地址——换取Access_Token地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    @Override
    public String giveAccessTokenUrl() {
        return "https://api.weixin.qq.com/sns/jscode2session";
    }

    /**
     * 功能描述：微信访问地址——刷新Token地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    @Override
    public String giveRefreshAccessTokenUrl() {
        return "https://api.weixin.qq.com/sns/oauth2/refresh_token";
    }

    /**
     * 功能描述：微信访问地址——换取JsapiTicket地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    @Override
    public String giveJsapiTicketUrl() {
        return null;
    }

    /**
     * 功能描述：微信访问地址——下单地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    @Override
    public String giveUnifiedOrderUrl() {
        return "https://api.mch.weixin.qq.com/pay/unifiedorder";
    }

    /**
     * 功能描述：微信访问地址——退款地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    @Override
    public String giveRefundPayOrderUrl() {
        return "https://api.mch.weixin.qq.com/secapi/pay/refund";
    }

    /**
     * 功能描述：微信访问地址——查询订单地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    @Override
    public String giveSearchOrderUrl() {
        return null;
    }

    /**
     * 功能描述：微信访问地址——关闭订单地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    @Override
    public String giveCloseOrderUrl() {
        return "https://api.mch.weixin.qq.com/pay/closeorder";
    }

    /**
     * 功能描述：微信访问地址——订单退款地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    @Override
    public String giveRefundOrderUrl() {
        return "https://api.mch.weixin.qq.com/secapi/pay/refund";
    }

    /**
     * 功能描述：微信访问地址——提现地址
     *
     * @author : 王雷
     * @date : 2021/1/16 0016 下午 10:48
     */
    @Override
    public String giveWithdrawUrl() {
        return "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
    }

    /**
     * 功能描述：微信访问地址——下单回调接口
     *
     * @author : 王雷
     * @date : 2021/1/22 0022 下午 8:24
     */
    @Override
    public String giveCodeUrlEncodeUrl() throws UnsupportedEncodingException {
        return URLEncoder.encode(giveCodeUrl(), "UTF-8");
    }

    /**
     * 功能描述：微信访问地址——获取微信二维码地址
     *
     * @author : 王雷
     * @date : 2021/1/22 0022 下午 8:24
     */
    @Override
    public String giveGenerateQrCodeUrl() {
        return "https://api.weixin.qq.com/cgi-bin/qrcode/create";
    }

    /**
     * 功能描述：微信访问地址——获取素材总数
     *
     * @author : 王雷
     * @date : 2021/1/22 0022 下午 8:24
     */
    @Override
    public String giveMaterialCountUrl() {
        return "https://api.weixin.qq.com/cgi-bin/material/get_materialcount";
    }

    /**
     * 功能描述：微信访问地址——获取素材列表
     *
     * @author : 王雷
     * @date : 2021/1/22 0022 下午 8:24
     */
    @Override
    public String giveMaterialDataUrl() {
        return "https://api.weixin.qq.com/cgi-bin/material/batchget_material";
    }

    /**
     * 功能描述：微信访问地址——获取微信菜单
     *
     * @author : 王雷
     * @date : 2021/1/22 0022 下午 8:24
     */
    @Override
    public String giveWxMenuUrl() {
        return "https://api.weixin.qq.com/cgi-bin/menu/get";
    }

    /**
     * 功能描述：微信访问地址——更新微信菜单
     *
     * @author : 王雷
     * @date : 2021/1/22 0022 下午 8:24
     */
    @Override
    public String giveUpdateWxMenuUrl() {
        return "https://api.weixin.qq.com/cgi-bin/menu/create";
    }

    /**
     * 功能描述：微信访问地址——是否关注
     *
     * @author : 王雷
     * @date : 2021/1/22 0022 下午 8:24
     */
    @Override
    public String giveIsAttentionUrl() {
        return "https://api.weixin.qq.com/cgi-bin/user/info";
    }

    /**
     * 功能描述：微信访问地址——批量为用户打标签
     *
     * @author : 王雷
     * @date : 2021/1/22 0022 下午 8:24
     */
    @Override
    public String giveBatchUserByTagUrl() {
        return "https://api.weixin.qq.com/cgi-bin/tags/members/batchtagging";
    }

    /**
     * 功能描述：定时器执行间隔
     *
     * @author : 王雷
     * @date : 2021/1/19 0019 下午 8:23
     */
    @Override
    public Long giveExecutionInterval() {
        return 1L;
    }

    /**
     * 功能描述：定时器执行间隔
     *
     * @author : 王雷
     * @date : 2021/1/19 0019 下午 8:23
     */
    @Override
    public TimeUnit giveExecutionIntervalUnit() {
        return TimeUnit.HOURS;
    }

    @Override
    public IWeiXinAttributeItem initAttribute(String appId) throws WeiXinRuntimeException {
        return null;
    }
}
